#/*************************************************************************
#    > File Name: Lib/Folder_Operation.py
#    > Author: Yan Wang
#    > Mail: wangyan@imnu.edu.cn
#    > Created Time: 2022年06月22日 星期三 11时31分17秒
# ************************************************************************/
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from Library import *


# 创建文件夹， 包含两个参数， folder_name 是文件夹名称， local 是文件夹位置
def Create_Folder(target_folder, local="./"):
    target_folder = Path(local) / target_folder 
    if target_folder.is_file():
        Create_Folder_from_FileDir(target_folder,local)
    if target_folder.suffix == "":
        if not target_folder.exists():   #exist()判断是否存在文件
            print("In Create_Folder: create a folder at ", target_folder)
            os.makedirs(target_folder)   #用于递归创建目录
    else :
        Create_Folder_from_FileDir(target_folder,local)
    return(target_folder)



# 创建文件夹， 文件夹的名称根据输入的文件名 去掉文件类型来决定， 
# 例如输入 ./Examples/file1.dat, 则 local 的路径下创建名为 file1 的文件夹
def Create_Folder_from_File(folder_name, local="./"):
    target_folder = Path(folder_name).stem   #Path().stem提取无后缀的文件名
    target_folder = Create_Folder(target_folder, local)
    return(target_folder)


# 创建文件夹， 文件夹的名称根据输入的文件路径决定， 
# 例如输入 ./Examples/test/sub_folder/file1.dat, 则 example 的路径下创建名为 test 以及 sub_folder 的文件夹
def Create_Folder_from_FileDir(folder_name,local="./"):
    target_folder = os.path.dirname(folder_name)   #os.path.dirname()去掉文件名，返回目录
    target_folder = Create_Folder(target_folder,local)
    return(target_folder)



# 计算一个文件夹中，某一类文件的数目
# 如 文件夹中包含 file_1.dat, file_2.dat 则返回值为2
# 这个函数既可以统计文件数量，也可统计文件夹数量
# 用file_type控制要查找的文件类型，以防存在多个文件名符合要求，但明显文件类型不同的混淆结果
def Find_File(input_folder,label, file_type="file"):
    #print("In Find_File, input folder is ", folder, " input label is ", label)
    folder=Path(input_folder)
    file_list_all=[]
    for file in folder.iterdir():   #.iterdir() 的方法用于创建一个迭代器包含该目录下所有文件和目录；Path(folder).iterdir()获取 folder 下的所有文件和目录列表。
        judge = False
        if file_type != "":
            if file_type == "file" :
                if file.is_file() :
                    judge= True
            elif file_type == "folder" :
                if file.is_dir():
                    judge = True
            else:
                this_file_type=file.suffix
                if file.is_file() and this_file_type in file_type :
                    judge = True
        else:
            judge = True
        if judge == False:
            continue
        file_name=os.path.basename(file)
        match=re.search(label,file_name)
        if(match!=None):
            full_file_name=folder / file_name
            file_list_all.append(full_file_name)
    return(file_list_all)


# 显示一个文件夹下所有的文件
def Show_All_File_Name_in_Folders(folder_name):
    g = os.walk(folder_name)  
    all_name=[]
    for path,dir_list,file_list in g:  
        print(path,dir_list,file_list)
        for file_name in file_list:  
            full_name=Path(path)/ file_name
            print(full_name)
            all_name.append(full_name)
    return(all_name)

# 显示一个文件夹下所有子目录
def Show_All_SubFolder_Name_in_Folders(folder_name):
    g = os.walk(folder_name)  
    all_name=[]
    for path,dir_list,file_list in g:  
        for dir_name in dir_list:  
            full_name=Path(path)/ dir_name 
            all_name.append(full_name)
    return(all_name)

